The technology described herein relates to a method of and an apparatus for performing texture mapping in graphics processing systems.
It is common in graphics processing systems to generate colours for sampling positions in a render output (e.g. image to be displayed) by applying so-called textures or texture data to the surfaces to be drawn. Such textures are typically applied by storing an array of texture elements or “texels”, each representing given texture data (such as colour, luminance and/or light/shadow, etc. values), and then mapping the texels onto the corresponding elements, such as (and, indeed, typically) a set of sampling positions, for the render output in question (e.g. image to be displayed).
Thus a graphics texture will typically be configured as an array of data elements (texture elements (texels)), each having a corresponding set of texture data stored for it. The texture data for a given position within the texture is then determined by sampling the texture at that position (e.g. using a bilinear interpolation process).
FIG. 1 shows an exemplary graphics processor (graphics processing unit (GPU)) 100 that can perform texture mapping.
As shown in FIG. 1, the GPU 100 comprises data processing circuitry that implements a graphics processing pipeline. The pipeline includes, inter alia, a rasterizer 102 and a renderer in the form of a programmable (fragment) shader core 104. The pipeline uses a buffer 106 (e.g. in external memory 108) for storing an output array (e.g. frame or image to be displayed).
The GPU 100 further comprises a texture mapper 110, and the memory 108 will also store, inter alia, graphics textures to be used by the GPU 100 when performing texture mapping operations.
In this system, the rasterizer 102 will rasterize input primitives into individual graphics fragments for processing. To do this, the rasterizer 102 rasterizes the primitives to sampling positions representing the render output, and generates graphics fragments representing appropriate sampling positions for rendering the primitives. Each fragment may represent a single sampling position or a set of plural sampling positions. The fragments generated by the rasterizer 102 are then sent onwards to the fragment shader (renderer) 104 for shading.
The fragment shader 104 executes shader programs for the fragments issued by the rasterizer 102 in order to render (shade) the fragments. The fragments are processed using execution threads in the shader core, with the threads executing the shader program(s) that are to be used to process the fragments. A thread is executed for each sampling position that is to be shaded.
A shader program may include texturing instructions for texture mapping operations that are required to be executed by the texture mapper 110.
When a texturing instruction is encountered by the fragment shader 104, a texturing instruction is sent from the fragment shader 104 to the texture mapper 110, requesting the texture mapper 110 to perform a texturing operation.
When instructed by the fragment shader 104 to perform a texture mapping operation, the texture mapper 110 reads textures from the memory 108 (as required), performs the texture mapping operation, and returns a (e.g. RGB) colour sampled from the texture back to the fragment shader 104, for use when shading the fragment and sampling position(s) in question.
The “shaded” fragment sampling positions from the fragment shader 104 are then stored as part of the output render target in the buffer 106, e.g. in the memory 108, e.g. for subsequent post-processing or display.
The Applicants believe that there is scope for improvements to the performance of texture mapping in graphics processing systems.
Like numerals are used for like features in the drawings where appropriate.